iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0

Bean 代表的是由 IoC 容器(IoC Container)管理的Java物件,這些物件構成了程式的邏輯,並且在整個專案中,可以被不同的 Class 分享&使用。

在Spring的 IoC 容器中,它可以管理一至多個 Bean

在Spring中,我們有幾種方式可以配置 Spring Bean:

  • 基於XML檔案的配置,這在Spring中是比較傳統的配置方式,官方的範例如下:

    <bean id="userManager" class="com.stuff.UserManager">
    	<property name="userPreferences" ref="userPreferences"/>
    </bean>
    

<bean>元素定義了需要被Spring IoC 容器管理的 Bean,可以透過id標籤去指定它是屬於哪個類別(Class)

<property>元素可以設定Bean的屬性,ref標籤來指定另一個Bean的依賴關係

  • 基於註解(Annotation)的配置,Spring 提供了一些註解( @Component@Service@Controller@Repository…等,後續會再一一介紹),它允許使用註解來標註類別(Class)並讓他們自動註冊為Bean。而我們可以透過在需要使用依賴的類別中加入@Autowired註解,自動注入依賴。

    但在使用基於註解的配置時,通常需要在配置類或 XML 配置中啟用Bean的掃描,如果沒有這麼做的話,Spring IoC 容器無法自動發現也無法使用註解標註的Bean,造成這些Bean無法被注入,也無法透過Spring IoC 容器進行管理。

    基於註解的配置的範例如下:

    @Service
    public class UserService {
    
        // 加入方法...
    }
    
    @Controller
    public class UserController {
    
        // 加入方法...
    }
    

    後續會再逐一介紹各個Bean的使用方式

  • 基於Java的配置,如果想要使用基於Java的配置,就得先認識@Bean
    @Configuration這兩個Bean。

基於Java的配置範例如下:

```java
@Configuration
@ComponentScan(basePackages = "com.example")
public class ApplicationConfig {

    @Bean
    public MyService myService() {
        return new MyService();
    }

    @Bean
    public MyRepository myRepository() {
        return new MyRepository();
    }
}
```

`@Bean`註解主要是用來將一個方法實體化,這個方式與使用XML檔案配置中<bean>元素設定的方式相同。
`@Configuration`註解通常會使用在類別上,表示這個類的方法創建時,應由Spring IoC的容器進行管理。

`@ComponentScan`註解用於告訴Spring讓它自動掃描指定路徑下是否包含了其他註解(例如:`@Service`、`@Controller`、`@Repository`…等),它會將他們註冊成為Bean,並讓Spring IoC 容器進行管理。

Spring 框架的核心在於透過 IoC 容器來管理 Bean,從而實現 IoC 和 DI 的功能。如果沒有 Bean,Spring 容器就失去了管理對象的核心元素,自然也無法實現 IoC 和 DI 這些設計模式。

沒有 Bean,就沒有 IoC 和 DI


上一篇
Day8 - 依賴注入(下)
下一篇
Day10 - Controller下的Bean (上)
系列文
這些年SpringBoot實戰開發教會我的事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言